/**
 * 防抖函数Hook
 * @param {Function} fn - 需要防抖的函数
 * @param {number} delay - 防抖延迟时间(ms)
 * @returns {Function} - 返回经过防抖处理的函数
 * @description 
 * 1. 当持续触发事件时，一定时间段内没有再触发事件，事件处理函数才会执行一次
 * 2. 如果设定的时间到来之前，又一次触发了事件，就重新开始延时
 */
export function useDebounce(fn, delay) {
  let timer = null
  return function (...args) {
    if (timer) clearTimeout(timer)
    timer = setTimeout(() => {
      fn.apply(this, args)
    }, delay)
  }
} 